<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>



 
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <title>Google Code</title>
 <script type="text/javascript"><!--
 (function(){function a(){this.t={};this.tick=function(c){this.t[c]=(new Date).getTime()};this.tick("start")}var b=new a;window.jstiming={Timer:a,load:b};if(window.external&&window.external.pageT)window.jstiming.pt=window.external.pageT;})();
 //--></script>
 <link rel="search" type="application/opensearchdescription+xml" title="Google Code" href="http://code.google.com/osd.xml">
 <link href="google_code_files/codesite.css" type="text/css" rel="stylesheet">
 <link rel="stylesheet" href="google_code_files/local_extensions.css" type="text/css" media="screen" charset="utf-8">
 <!--[if IE]>
 <style type="text/css">
 .g-tpl-25-75 .g-unit { width: 74%; }
 .g-tpl-25-75 .g-first { width: 24%; }
 </style>
 <![endif]-->
 <script type="text/javascript" charset="utf-8"><!--
 var _tocPath_ = null;
 // Feeds for the homepage gadget
 window._homepageGadgetData_ = {
 homepageVideoFeedUrl: 'http://gdata.youtube.com/feeds/videos?author=googledevelopers&alt=rss&orderby=published#gc-codevideo',
 googleCodeBlogFeedUrl: 'http://google-code-updates.blogspot.com/atom.xml'
 }
 //--></script>
 <script src="google_code_files/codesite.js" type="text/javascript"></script>
 <script type="text/javascript" src="google_code_files/jsapi"></script><script src="google_code_files/a" type="text/javascript"></script><link rel="stylesheet" href="google_code_files/default.css" type="text/css"><script src="google_code_files/defaulten.js" type="text/javascript"></script></head><body>
 <div id="gc-container">
<a name="top"></a>
<div id="skipto">
 
 
</div>
<div id="langpref">
 
 <a style="text-decoration: none; cursor: pointer;" class="dropdown" href="http://code.google.com/"><img class="fauxSelectIcon" src="google_code_files/globe2_small.png" style="border: medium none ; vertical-align: middle;"><span class="title1237803089164 fauxSelectTitle" style="text-decoration: underline; vertical-align: middle;">English</span><span class="fauxSelectArrow" style="vertical-align: middle; text-decoration: none; font-family: arial,sans-serif; font-size: 11px;">&nbsp;▼</span></a>
 <span>|</span>
 <a href="http://code.google.com/more/#products-products-android">Site Directory</a>
 
 <!--
 <span>|</span>
 
 <a href="http://www.google.com/accounts/Login?continue=http%3A%2F%2Fcode.google.com%2F&amp;followup=http%3A%2F%2Fcode.google.com%2F">Sign in</a>
 
 -->
 
</div>
<div id="gc-header">
 <div id="logo"><a href="http://code.google.com/">
 
 
 <img src="google_code_files/cleardot.gif" alt="Google Code Home Page" id="gc-logo-img" width="1" height="1">
 
 
 </a></div>
 <div id="search">
 <div id="searchForm" class="searchForm">
 <form id="cse" action="http://www.google.com/cse" accept-charset="utf-8" class="gsc-search-box" onsubmit="executeGSearch(document.getElementById('gsearchInput').value); return false;">
 <noscript>
 <input type="hidden" name="cref" value="http://code.google.com/cse/googlecode-context.xml"/>
 </noscript>
 <table class="gsc-search-box" cellpadding="0" cellspacing="0">
 <tbody>
 <tr>
 <td class="gsc-input">
 <input id="gsearchInput" name="q" maxlength="2048" class="gsc-input" autocomplete="off" title="Google Code Search" style="width: 345px;" type="text">
 </td>
 <td class="gsc-search-button">
 <div id="cs-searchresults" onclick="event.cancelBubble = true;"></div>
 <input title="Search" id="gsearchButton" class="gsc-search-button" name="sa" value="Search" type="submit">
 </td>
 </tr>
 <tr>
 <td colspan="2" class="greytext">e.g. "ajax apis" or "open source"</td>
 </tr>
 </tbody>
 </table>
 </form>
 </div> <!-- end searchForm -->
 </div> <!-- end search -->
</div> <!-- end gc-header -->
<div id="codesiteContent">
<a name="gc-topnav-anchor"></a>
<div id="gc-topnav">
 <h1></h1>
 <ul class="gc-topnav-tabs">
<li>&nbsp;</li>
 </ul>
</div> <!-- end gc-topnav -->

 <!-- Google Code Content -->
 <div id="gc-home">
 <div class="g-section g-tpl-25-75">
 <div class="g-unit g-first">
 <h2>Developer Resources</h2>
 <ul class="devprod">
 <li class="apis"><a href="http://code.google.com/more/#products-products-android">APIs &amp; Tools</a></li>
 <li class="opensource"><a href="http://code.google.com/opensource/">Open Source Programs</a></li>
 <li class="projecthosting"><a href="http://code.google.com/hosting/">Project Hosting</a></li>
 </ul>
 <h2>Featured Products</h2>
 <ul class="devprod">
 <li class="android"><a href="http://code.google.com/android/">Android</a></li>
 <li class="ajax"><a href="http://code.google.com/apis/ajax/">AJAX APIs</a></li>
 <li class="appengine"><a href="http://code.google.com/appengine/">App Engine</a></li>
 <li class="gears"><a href="http://code.google.com/apis/gears/">Gears</a></li>
 <li class="gwt"><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></li>
 <li class="opensocial"><a href="http://code.google.com/apis/opensocial/">OpenSocial</a></li>
 </ul>
 <p><a href="http://code.google.com/more/#products-products-android">More products »</a></p>
 </div>
 <div class="g-unit">
 <h2>News</h2>
 <div class="g-section g-tpl-300">
 <div class="g-unit g-first" style="text-align: right;">
 <a href="http://code.google.com/events/io/" style="border: 0pt none ;"><img style="border: 0pt none ; padding: 2px;" src="google_code_files/google-io-2009.jpg" alt="" width="300" height="156"></a>
 </div>
 <div class="g-unit" style="padding-left: 20px;">
 <h3>Google I/O Early Registration Now Open</h3>
 <p>Early registration is officially open for Google's largest developer event of the year, <a href="http://code.google.com/events/io/">Google I/O</a>,
being held on May 27th and 28th, 2009 at Moscone Center in San
Francisco. Google I/O attracts thousands of developers with two days
full of in-depth breakout sessions on the latest advancements in <a href="http://code.google.com/android/">Android</a>, <a href="http://code.google.com/appengine/">App Engine</a>, <a href="http://chromium.org/">Chrome</a>, <a href="http://code.google.com/gwt/">GWT</a>, <a href="http://code.google.com/apis/ajax/">AJAX APIs</a>, and more. We've published a subset of the <a href="http://code.google.com/events/io/sessions.html">session abstracts</a>, but you can also visit the <a href="http://code.google.com/events/io/">Google I/O website</a> to learn more and <a href="https://io2009.event-projects.com/">register</a>.</p>
 <p><a href="http://google-code-updates.blogspot.com/2009/01/google-io-2009-developer-conference.html">Read more »</a></p>
 <br>
 </div>
 </div>
 <br>
 <h2>Developer Videos</h2>
 <div id="gc-codevideo"><div class="g-section g-tpl-50-50 gc-techtalk"><div class="g-unit g-first"><div class="post techtalk"><div class="screenshot"><a href="http://www.youtube.com/watch?v=gF5fTK9WXW4"><img alt="Code Conversations - Kevin Marks - Full Version - Part 2" src="google_code_files/2.htm" width="90" height="80"></a></div><div class="info"><div class="name"><a href="http://www.youtube.com/watch?v=gF5fTK9WXW4" title="Code Conversations - Kevin Marks - Full Version - Part 2">Code Conversations - Kevin Marks - Full Version - Part 2</a></div><div class="author videodateformat">Posted on 3/22/2009</div></div></div>&nbsp;</div><div class="g-unit"><div class="post techtalk"><div class="screenshot"><a href="http://www.youtube.com/watch?v=pBQHkp9gOJs"><img alt="Code Conversations - Kevin Marks - Full Version - Part 1" src="google_code_files/2_002.htm" width="90" height="80"></a></div><div class="info"><div class="name"><a href="http://www.youtube.com/watch?v=pBQHkp9gOJs" title="Code Conversations - Kevin Marks - Full Version - Part 1">Code Conversations - Kevin Marks - Full Version - Part 1</a></div><div class="author videodateformat">Posted on 3/22/2009</div></div></div>&nbsp;</div></div></div>
 <div><a href="http://code.google.com/videos/">More videos »</a></div>
 <br>
 <br>
 <div id="gc-blog-gadget"><iframe style="border: medium none ;" src="google_code_files/ifr.htm" width="100%" frameborder="0" height="400"></iframe></div>
 </div>
 </div>
 </div>
 <!-- End Google Code Content -->
 </div> <!-- end codesite content -->
<div id="gc-footer" dir="ltr">
 <div class="text">
 
 ©2009 Google -
 <a href="http://code.google.com/">Code Home</a> -
 <a href="http://www.google.com/accounts/TOS">Terms of Service</a> -
 <a href="http://www.google.com/privacy.html">Privacy Policy</a> -
 <a href="http://moderator.appspot.com/#e%253Dagltb2RlcmF0b3JyDgsSBlNlcmllcxifggIM%252Bv%253D0">Feedback</a> -
 <a href="http://code.google.com/more/">Site Directory</a>
 <br> <br>
 Google Code offered in:
 <a href="http://code.google.com/intl/zh-CN/">中文</a> -
 <a href="http://code.google.com/intl/en/">English</a> -
 <a href="http://code.google.com/intl/pt-BR/">Português</a> -
 <a href="http://code.google.com/intl/ru/">Pусский</a> -
 <a href="http://code.google.com/intl/es/">Español</a> -
 <a href="http://code.google.com/intl/ja/">日本語</a>
 </div>
</div><!-- end gc-footer -->
</div><!-- end gc-containter -->


 <select size="6" style="position: absolute; z-index: 99; left: 852px; top: 22px; display: none;" class="fauxSelect"><option value="zh-CN">中文 (简体)</option><option value="en">English</option><option value="pt-BR">Português (Brasil)</option><option value="ru">Pусский</option><option value="es">Español</option><option value="ja">日本語</option></select><div id="cs-searchresults"><div id="cs-recommended">Suggestions</div><div id="searchResult1"></div><div id="searchResult2"></div><div id="searchResult3"></div><div id="searchResult4"></div><div id="searchResult5"></div><div id="searchResult6"></div><div id="searchResult7"></div></div></body><script type="text/javascript"><!--
function __RP_Callback_Helper(str, strCallbackEvent, splitSize, func){var event = null;if (strCallbackEvent){event = document.createEvent('Events');event.initEvent(strCallbackEvent, true, true);}if (str && str.length > 0){var splitList = str.split('|');var strCompare = str;if (splitList.length == splitSize)strCompare = splitList[splitSize-1];var pluginList = document.plugins;for (var count = 0; count < pluginList.length; count++){var sSrc = '';if (pluginList[count] && pluginList[count].src)sSrc = pluginList[count].src;if (strCompare.length >= sSrc.length){if (strCompare.indexOf(sSrc) != -1){func(str, count, pluginList, splitList);break;}}}}if (strCallbackEvent)document.body.dispatchEvent(event);}function __RP_Coord_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_Coord_Callback = str;pluginList[index].__RP_Coord_Callback_Left = splitList[0];pluginList[index].__RP_Coord_Callback_Top = splitList[1];pluginList[index].__RP_Coord_Callback_Right = splitList[2];pluginList[index].__RP_Coord_Callback_Bottom = splitList[3];};__RP_Callback_Helper(str, 'rp-js-coord-callback', 5, func);}function __RP_Url_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_Url_Callback = str;pluginList[index].__RP_Url_Callback_Vid = splitList[0];pluginList[index].__RP_Url_Callback_Parent = splitList[1];};__RP_Callback_Helper(str, 'rp-js-url-callback', 3, func);}function __RP_TotalBytes_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_TotalBytes_Callback = str;pluginList[index].__RP_TotalBytes_Callback_Bytes = splitList[0];};__RP_Callback_Helper(str, null, 2, func);}function __RP_Connection_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_Connection_Callback = str;pluginList[index].__RP_Connection_Callback_Url = splitList[0];};__RP_Callback_Helper(str, null, 2, func);}
//--></script></html>